package com.perfect.config;

import com.perfect.interceptor.CustomRequestInterceptor;
import feign.Contract;
import feign.Logger;
import feign.Request;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

// 注意： 此处配置@Configuration注解就会全局生效，如果想指定对应微服务生效，就不能配置
@Configuration
public class FeignConfig {

    /**
     * 日志级别
     *
     * @return
     */
    @Bean
    public Logger.Level feignLoggerLever() {
        return Logger.Level.FULL;
    }

    /**
     * 自定义请求拦截器
     */
    @Bean
    public CustomRequestInterceptor customRequestInterceptor() {
        return new CustomRequestInterceptor();
    }

    /**
     * 修改配置，支持feign 原生注解
     *
     * @return
     */

//    @Bean
    public Contract feignContract() {
        return new Contract.Default();
    }


    /**
     * 自定义超时连接超时时间，和读取超时时间(即请求处理的时间)
     * 默认连接超时时间2s,读取超时时间 5s
     * <p>
     * 超过设置的超时时间，会报读取超时
     * java.net.SocketTimeoutException: Read timed out
     * <p>
     * Feign的底层用的是Ribbon，但超时时间以Feign配置为准
     *
     * @return
     */
//    @Bean
    public Request.Options options() {
        return new Request.Options(5, TimeUnit.SECONDS, 10, TimeUnit.SECONDS, true);
    }


}
